package JUC.Safe;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.locks.Condition;

//java.util.ConcurrentModificationException并发修改异常
public class ListTest {
    public static void main(String[] args) {
        //并发下ArrayList是不安全的
        /**
         * 解决方案：
         * 1.使用Vector
         * 2.调用Collection的工具类
         * 3.使用CopyOnWriteArrayList
         */
//        List<String> list = new Vector<>();
//        List<String> list= Collections.synchronizedList(new ArrayList<>());
//        写入时复制：COW计算机设计程序的优化，多个线程调用时是固定的，写入（覆盖）
        //在写入时避免覆盖，造成数据问题
        //读写分离Mycat
        List<String> list= new CopyOnWriteArrayList<>();
        for (int i = 0; i <10 ; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,5));
                System.out.println(list);
            },String.valueOf(i)).start();
            list.add(UUID.randomUUID().toString().substring(0,5));
            System.out.println(list);
        }

    }
}
